<?php 
/**
 * ViewObject
 * 
 * 模板解析基类，所有模板解析类都要继承此类
 *
 * @author   songhuan <iphper@yeah.net>
 * @version   $Id: Template.php 1 2010-08-10 14:40:00Z $
 */
interface ViewInterface
{
	/**
     * 获取模板引擎
     *
     * @return View
     */
    public function getEngine();

    /**
     * 从 assign 过的值中获取一个变量
     *
     * @param  string $key
     * @return string|array|...
     */
    public function __get($key);

    /**
     * 判读是否 assign 过某个变量
     *
     * @param  string $key
     * @return boolean
     */
    public function __isset($key);

    /**
     * 向 assign 中设置一个变量
	 *
	 * @see assign()
     * @param string $key 变量名
     * @param mixed $value 变量值
     * @return void
     */
    public function __set($key, $value);

    /**
     * 从 assign 值中删除一个变量
     *
     * @param string $key
     * @return void
     */
    public function __unset($key);

    /**
     * 向View中设置一个变量
     *
     * @see __set()
     * @param array|string $tpl_var 变量名
     * @param mixed $value $value 变量值
     */
    public function assign($tpl_var, $value = null);

    /**
     * 返回所有 assign 过的值
     *
     * @return array
     */
    public function getVars();

    /**
     * 清空所有 assign 过的值
     *
     * @return void
     */
    public function clearVars();
    
    /**
     * 解析模板
     * 
     * @param $tplname 模板名称
     * @param $display 是否显示模板
     * @return void|string template_contents
     */
    public function fetch($tplname, $display = false);
    
    /**
     * 解析并显示模板
     * 
     * @param $tplname 模板名称
     * @return void
     */
    public function display($tplname);
}
